package com.zqs.compareface.utils.impl;

import org.opencv.core.Mat;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.TreeSet;


/**
 * @Program: FaceCompare
 * @Description: 遍历目录及其子目录中的文件（图片）
 * @Author: zqs
 * @Create： 2021-08-12-14:40
 */
public class GetEachDirImagesUtil {
    /**
     * List应该放在类，不能放到方法理，如果放到方法里会导致无法将全部文件添加到List中，可能是重新调用方法后形成了覆盖；
     */
    List<String> imageStringList = new ArrayList<>();
   public static List<Mat> imageMatList = new ArrayList<>();
    public List<String> filesToStringList(File directoryPath) {
        File[] fileList = directoryPath.listFiles();
        //遍历文件和文件夹
        for (File file : fileList) {
            //如果是文件夹，递归查找
         if (file.isDirectory()) {
            filesToStringList(file);
           }else if (file.isFile()) {
             //是文件的话，把文件名放到一个字符串中进行判断文件类型
             String filename = file.getName();
             if (filename.endsWith("jpg") || filename.endsWith("png")) {
                 //获取文件的绝对路径
                 String fileAbsolutePath = file.getAbsolutePath();
                 System.out.println(fileAbsolutePath);
                 //处理文件的路径，放入List或者打印、保存到文件.
                 imageStringList.add(fileAbsolutePath);
             }
         }
        }
        return imageStringList;
    }

    public void filesToMatLsit(File f){
        //数组指向文件夹中的文件和文件夹
        File[] fileList = f.listFiles();
        TreeSet<String> fileset = new TreeSet<>();
        //遍历文件和文件夹
        for (File file : fileList) {
            //如果是文件夹，递归查找
            if (file.isDirectory()) {
                filesToMatLsit(file);
            } else if (file.isFile()) {
                if (file.getName().endsWith(".jpg") || file.getName().endsWith(".png")) {
                    String filepath = file.getAbsolutePath();
                    Mat mat = LocalCheckUtil.conv_Mat(filepath);
                    if (mat == null){
                        MyLogUtil.log(file+"图片无法转换为mat，删除！\n "+filepath);
                        file.delete();
                    }else {
                        imageMatList.add(mat);
                    }
                }
            }
        }
    }
}
